package com.lxk.util.weixin;

import com.alibaba.fastjson.JSONObject;
import com.lxk.util.HttpUtil;

import java.util.UUID;

/**
 * 微信工具类，包含基本配置参数、常用请求URL、授权相关方法
 * @author JohnSoybean
 */
public class WeChatUtil {

//CFG 配置常量
	/**
	 * CFG 服务器地址URL
	 */
	public final static String server_url = "https://api.noxbase.com";

    /**
     * CFG API秘钥
     */
    public final static String api_key = "8f064ce01a5442e8a00fed9f69a5a975";

    /**
     * CFG 已配置 小程序 AppID 微信号唯一标识
     */
     public final static String appid_MINI = "wxfacb13f8a3a00fe5";

    /**
     * CFG 已配置 小程序 AppSecret 第三方用户唯一凭证密钥
     */
    public final static String appsecret_MINI = "d307fc31a76396c1951db608760c0f82";

    /**
     * CFG 已配置 小程序 AppID 微信号唯一标识
     */
    public final static String appid_H5 = "wxb6665bdd3404314c";

    /**
     * CFG 已配置 小程序 AppSecret 第三方用户唯一凭证密钥
     */
    public final static String appsecret_H5 = "0088633f307d231881cb72aef345c9d5";

    /**
     * APP AppID 微信号唯一标识
     */
    public final static String appid_APP = "wx708b6b6876a71e98";

    /**
     * APP AppSecret 第三方用户唯一凭证密钥
     */
    public final static String appsecret_APP = "bd9572a287f7b2496451f415738315fe";



//常用URL

    /**
     * URL-拉取用户信息
     * access_token (网页授权版)
     * openid
     * zh_CN
     */
    public static String userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=%1$s&openid=%2$s&lang=zh_CN";

    /**
    * -应用授权作用域
    * snsapi_base 不弹出授权页面，直接跳转，只能获取用户openid
    * snsapi_userinfo 弹出授权页面，通过openid拿到昵称、性别、所在地
    */
    public final static String snsapi_userinfo = "snsapi_userinfo";

    /**
     * URL-通过code获取网页授权的access_token和openid
     * appid, appsecret, code, grant_type
     */
    public static String access_token_oauth2_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%1$s&secret=%2$s&code=%3$s&grant_type=authorization_code";

    /**
     * URL-获取code
     * %1$s appId
     * %2$s 要重定向的url
     * %3$s 应用授权作用域，snsapi_base或snsapi_userinfo
     * %4$s 重定向后会带上state参数，开发者可以填写a-zA-Z0-9的参数值，最多128字节
     */
    public final static String snsapi_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%1$s&redirect_uri=%2$s&response_type=code&scope=%3$s&state=%4$s#wechat_redirect";

    /**
     * URL-由code获取session_key
     * %1$s appid
     * %2$s appsecret
     * %3$s js_code
     */
    public final static String code_to_session_url = "https://api.weixin.qq.com/sns/jscode2session?appid=%1$s&secret=%2$s&js_code=%3$s&grant_type=authorization_code";

    /**
     * 请求二维码
     */
    public final static String qrcode_url ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=%1$s";



//网页授权工具

    /**
     * -获取10位随机数
     * @return nonceStr
     */
    public static String getNonceStr(){
        return UUID.randomUUID().toString().replace("-","").substring(0, 10);
    }

    /**
     * APP -由code获取access_token和openid
     * @param code
     * @return
     */
    public static JSONObject getAccessTokenOauth2APP(String code) {
    	//拼接获取access_token的接口链接
    	String access_token_url= String.format(access_token_oauth2_url, appid_APP, appsecret_APP, code);
    	JSONObject jsonObject = HttpUtil.doGet(access_token_url);
		return jsonObject;
	}


    /**
     * H5 -由code获取access_token和openid
     * @param code
     * @return
     */
    public static JSONObject getAccessTokenOauth2(String code) {
        //拼接获取access_token的接口链接
        String access_token_url= String.format(access_token_oauth2_url, appid_H5, appsecret_H5, code);
        JSONObject jsonObject = HttpUtil.doGet(access_token_url);
        return jsonObject;
    }


    /**
     * MINI -由code获取session_key
     * @param jsCode
     * @return
     */
    public static JSONObject getSessionKey(String jsCode) {
        String session_key_url= String.format(code_to_session_url, appid_MINI, appsecret_MINI, jsCode);
        JSONObject jsonObject = HttpUtil.doGet(session_key_url);
        return jsonObject;
    }


    /**
     * 生成小程序access_token
     * 该access_token与网页授权接口中的不同
     * @return access_token
     */
    public static String reqAccessToken() {
        String access_token = "";
        String grant_type = "client_credential";//获取access_token填写client_credential
        //这个url链接地址和参数皆不能变
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=" + grant_type + "&appid=" + appid_MINI + "&secret=" + appsecret_MINI;  //访问链接
        JSONObject jsonObject = HttpUtil.doGet(url);
        access_token = jsonObject.getString("access_token");
        return access_token;
    }


}

